﻿namespace DotNetStar.OpenSDK.WeChat.Open
{
    using System.Net.Http;
    using OAuth;

    /// <summary>
    /// 表示微信开放平台刷新令牌的 api 模块。
    /// </summary>
    public class WeChatRefreshTokenApiRequest : RefreshTokenApiRequest<WeChatOAuthResponse>
    {
        /// <summary>
        /// 初始化 <see cref="WeChatRefreshTokenApiRequest"/> 类的新实例。
        /// </summary>
        /// <param name="config">OAuth2.0 配置。</param>
        /// <param name="refreshToken">刷新令牌的字符串。</param>
        public WeChatRefreshTokenApiRequest(OAuthConfig config, string refreshToken)
            : base("https://api.weixin.qq.com/sns/oauth2/refresh_token", config, refreshToken) 
            => this.RefreshToken = refreshToken;

        /// <summary>
        /// 获取用于刷新凭据的令牌字符串。
        /// </summary>
        [ArgumentName("refresh_token")]
        public new string RefreshToken { get;}
        /// <summary>
        /// 获取应用 Id。
        /// </summary>
        public string AppId => base.Config.ClientId;
        /// <summary>
        /// 获取授权类型。
        /// </summary>
        public string Grant_Type => "refresh_token";



        /// <summary>
        /// 处理自定义请求结果的回调。
        /// </summary>
        /// <param name="httpResponse">Http 请求响应的 <see cref="T:System.Net.Http.HttpResponseMessage" /> 实例。</param>
        /// <returns>
        /// 自定义的处理结果。
        /// </returns>
        public override WeChatOAuthResponse ResponseHandler(HttpResponseMessage httpResponse) => SDK.Deserialize<WeChatOAuthResponse>(httpResponse.GetContentAsString());
    }
}
